当我们想在 adb shell 环境下查看 sqlite3 数据库时,可以使用 sqlite3 命令,但是有些手机没有内置 sqlite3,所以就会报 sqlite3: inaccessible or not found
的错误,需要我们自己将 sqlite3 可执行文件导入到系统中。本文以 mac + Redmi Note 9(64位,Android31) 为例,介绍从编译 sqlite3 到 push 到手机 /system 分区。
1. 编译 sqlite3
- 去官网下载 sqlite-autoconf-xxxxxxx.tar.gz 并解压
- 确保电脑配置了
ANDROID_HOME
环境变量,修改脚本中对应的 ndk 版本号
- 如果是32位架构,HOST 改为 armv7a,API 修改为对应手机的 Android 系统版本
脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/bash
export TOOLCHAIN=$ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/darwin-x86_64 export HOST=aarch64-linux-android export API=31 export CC=$TOOLCHAIN/bin/$HOST$API-clang export CXX=$TOOLCHAIN/bin/$HOST$API-clang++ export AR=$TOOLCHAIN/bin/$HOST-ar export AS=$TOOLCHAIN/bin/$HOST-as export LD=$TOOLCHAIN/bin/$HOST-ld export RANLIB=$TOOLCHAIN/bin/$HOST-ranlib export STRIP=$TOOLCHAIN/bin/$HOST-strip export CFLAGS="-mthumb -fpic -ffunction-sections -funwind-tables -fstack-protector-all -fno-strict-aliasing" export CXXFLAGS="$CFLAGS -frtti -fexceptions"
./configure --prefix=`pwd`/build/sqlite3/ \ --host=$HOST \ --enable-shared \ --disable-static \ --disable-tcl
if [ $? -eq 0 ]; then make clean make -j16 make install fi
|
2. push 到 /system/xbin/
cd 到源码目录执行上述脚本会生成 sqlite3 可执行文件,如果你的手机已经是完全 root 过的,则直接 push 到 /system/xbin/ 即可。
但是我的手机是借助 magisk 来开启 root 权限的,是没有 system 分区的写权限的,这里我们先将 sqlite3 push 到 /sdcard 目录下,然后需要安装一个 magisk 模块 magic_overlayfs 来开启读写权限。
安装好 magic_overlayfs 模块后,终端执行 adb shell "su -c 'cp /sdcard/sqlite3 /system/xbin/'"
。
Finish